import axios from 'axios';
import { ElMessage } from 'element-plus';
import {SetTime} from './Settime';
const instance = axios.create({
  timeout: 8000
});

// 添加请求拦截器
instance.interceptors.request.use(
  async function (config) {
    // 在发送请求之前做些什么
  const token = localStorage.getItem('token') || '';
    // 拿到本地里面的时间戳
  const tokenStartTime:any = window.localStorage.getItem('time');
  //我们自己定义一个1天过期的时间
  const timeOver = 1 * 24 * 3600 * 1000;
  //获取当前的时间
  const date = new Date().getTime();
  // 如果大于说明是token过期了
  if(date - tokenStartTime > timeOver) {
       // 删除本地存储中的token 
       localStorage.removeItem('token');
 }
    //判断token是否存在
    if (!token) {
       ElMessage({
        showClose: true,
        message: '用户身份认证已过期，请重新登录',
        type: 'error'
      });
      localStorage.setItem('text','身份过期');
    }else{
      config.headers.Authorization = token;
    }

    return config;
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 添加响应拦截器
instance.interceptors.response.use(
  function (response) {
    // 对响应数据做点什么

    return response;
  },
  function (error) {
    // 对响应错误做点什么

    //响应错误，关闭加载
    const Status = error.response.status;

    switch (Status) {
      case 400:
        ElMessage({
          showClose: true,
          message: '客户端请求的语法错误，服务器无法理解',
          type: 'error'
        });
        console.log('客户端请求的语法错误，服务器无法理解');
        return error.response;
      case 401:
        ElMessage({
          showClose: true,
          message: '用户身份认证已过期，请重新登录',
          type: 'error'
        });

        setTimeout(() => {
          // window.location.href = '/login';
        }, 1000);

        console.log('用户身份认证已过期，请重新登录');
        return error.response;
      case 403:
        ElMessage({
          showClose: true,
          message: '服务器拒绝执行此请求',
          type: 'error'
        });
        console.log('服务器拒绝执行此请求');
        return error.response;
      case 404:
        ElMessage({
          showClose: true,
          message: '服务器无法根据客户端的请求找到资源',
          type: 'error'
        });
        console.log('服务器无法根据客户端的请求找到资源');
        return error.response;
      case 500:
        ElMessage({
          showClose: true,
          message: '服务器请求错误',
          type: 'error'
        });
        console.log('服务器请求错误');
        return error.response;
      case 501:
        ElMessage({
          showClose: true,
          message: '服务器不支持请求的功能，无法完成请求',
          type: 'error'
        });
        return error.response;
      case 502:
        ElMessage({
          showClose: true,
          message: '远程服务器接收到了一个无效的响应',
          type: 'error'
        });
        return error.response;
      case 503:
        ElMessage({
          showClose: true,
          message: '由于超载或系统维护，服务器暂时的无法处理客户端的请求。',
          type: 'error'
        });
        return error.response;
      case 504:
        ElMessage({
          showClose: true,
          message: '未及时从远端服务器获取请求',
          type: 'error'
        });
        return error.response;
      case 505:
        ElMessage({
          showClose: true,
          message: '服务器不支持请求的HTTP协议的版本,无法完成处理',
          type: 'error'
        });
        return error.response;
      default:
        break;
    }

    return Promise.reject(error);
  }
);

export default instance;
